﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaCommerce.Facturar_Publicaciones
{
    public partial class frm_facturarPublicaciones : Form
    {
        private DataTable dt_itemsFactura;

        public frm_facturarPublicaciones()
        {
            InitializeComponent();
        }

        private void frm_facturarPublicaciones_Load(object sender, EventArgs e)
        {
            //---Cargar FORMAS PAGO---//
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_TIPOS_FORMAS_PAGO";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt_formasPago = baseDeDatos.consulta(sqlCommand);
            cmb_formasPago.DataSource = dt_formasPago;
            cmb_formasPago.DisplayMember = "DESCRIPCION";
            cmb_formasPago.ValueMember = "ID_FORMA_PAGO";
            cargarFilas();
            nud_cantItemsARendir.Minimum = 1;
            nud_cantItemsARendir.Maximum = dgv_publicacionesARendir.RowCount;
        }

         private void cargarFilas()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.LISTAR_ITEMS_POR_FACTURAR";
            sqlCommand.Parameters.AddWithValue("@id_usuario", baseDeDatos.idUsuario);
            sqlCommand.CommandType = CommandType.StoredProcedure;
            dt_itemsFactura = baseDeDatos.consulta(sqlCommand);
            dgv_publicacionesARendir.DataSource = dt_itemsFactura;
         }

        private void btn_cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_emitirFactura_Click(object sender, EventArgs e)
        {
            if (nud_cantItemsARendir.Value > 0)
            {
                if (Convert.ToInt32(cmb_formasPago.SelectedValue) == 2)
                {
                    frm_datosTarjeta frm_datosTarjeta = new frm_datosTarjeta();
                    frm_datosTarjeta.ShowDialog();
                    if (frm_datosTarjeta.form_datos_tarjeta_submit_value==true){
                    cargarFactura();
                    MessageBox.Show("Factura emitida. ¡Muchas gracias!");
                    this.cargarFilas();
                    }
                    else
                    {
                        MessageBox.Show("No se ingresaron datos de la tarjeta. Intente nuevamente");
                    }
                }
                 
                else
                {
                    cargarFactura();
                    MessageBox.Show("Factura emitida. ¡Muchas gracias!");
                    this.cargarFilas();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar la cantidad de items a rendir.");
            }
            nud_cantItemsARendir.Maximum = dgv_publicacionesARendir.RowCount;
        }

          private void cargarFactura()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.INSERTAR_FACTURA";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_forma_pago", Convert.ToInt32(cmb_formasPago.SelectedValue));
            sqlCommand.Parameters.AddWithValue("@fecha", Convert.ToDateTime(Properties.Settings.Default.FechaDelSistema));
            
            int idFactura = baseDeDatos.ejecuta(sqlCommand);
            int i = 1;    
            foreach (DataRow dr in dt_itemsFactura.Rows)
            {
                insertarItem(Convert.ToInt32(dr["ID_ITEM_FACTURA"]),idFactura);
                i++;
                if (i > nud_cantItemsARendir.Value)
                    break;
            }
            actualizarTotalFactura(idFactura);
         }

          private void actualizarTotalFactura(int id_factura)
          {
              BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
              SqlCommand sqlCommand = new SqlCommand();
              sqlCommand.CommandText = "LOS_GDDES.INSERTAR_TOTAL_FACTURA";
              sqlCommand.CommandType = CommandType.StoredProcedure;
              sqlCommand.Parameters.AddWithValue("@id_factura", id_factura);
              baseDeDatos.ejecuta(sqlCommand);
          }

          private void insertarItem(int id_item_factura,int id_factura)
          {
              BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
              SqlCommand sqlCommand = new SqlCommand();
              sqlCommand.CommandText = "LOS_GDDES.AGREGAR_ITEM_A_FACTURA";
              sqlCommand.CommandType = CommandType.StoredProcedure;
              sqlCommand.Parameters.AddWithValue("@id_factura", id_factura);
              sqlCommand.Parameters.AddWithValue("@id_item_factura", id_item_factura);
              baseDeDatos.ejecuta(sqlCommand);
          }
    }
}